/**
 * 此文件作为Generator的核心入口
 * 需要导出一个继承自 Yeoman Generator 的类型
 * Yeoman Generator 在工作时会自动调用我们在此类型中定义的一些生命周期方法
 * 我们在这些方法中可以通过调用父类提供的一些工具方法实现一些功能，例如文件写入
 *  yarn init
 *  yarn add yeoman-generator
*/
const Generator = require('yeoman-generator')
module.exports = class extends Generator{
  prompting(){ //命令行交互询问
    //Yeoman 在询问用户环节会自动调用此方法
    //在此方法中可以调用父类的 prompt() 方法发出对用户的命令行询问
    return this.prompt([
      {
        type:'input', //输入方式接收用户提交信息
        name:'title',  //键
        message:'Your project name', //界面给用户提示
        default: this.appname //appname 为项目生成目录
      }
    ])
    .then(answers=>{
      //answers =>{name:'user input value;'}
      this.answers = answers
    })
  }
  writing(){
    //Yeoman自动在生成文件阶段调用此方法
    //我们这里尝试在项目目录中写入文件
    // this.fs.write(
    //   this.destinationPath("temp.txt"),
    //   Math.random().toString()
    // )

    //模板文件路径
    const tmpl = this.templatePath('foo.txt')
    //输出目标路径
    const output = this.destinationPath('foo.txt')
    //模板数据上下文
    const context = this.answers//{title:'Hello mc',success:false}

    this.fs.copyTpl(tmpl,output,context) //将模板文件映射到生成输出目录
  }
}